﻿using Crm.Bussiness;
using Crm.CrmClient;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Crm.Views
{
    public partial class Gorusme : ChildWindow
    {
        CrmClient.CrmServiceClient client = new CrmClient.CrmServiceClient();
        ObservableCollection<Katilimci> katilimcilar = new ObservableCollection<Katilimci>();
        public Hareket Hareket { get; set; }
        private bool eskiEvrak = false;
        public Boolean EskiEvrak { get { return eskiEvrak; } set { eskiEvrak = value; } }
        private bool isDashboard = false;
        public Boolean IsDashBoard { get { return isDashboard; } set { isDashboard = value; } }

        private bool gorusme = true;
        public Boolean GorusmeEvragi { get { return gorusme; } set { gorusme = value; } }

        public Gorusme()
        {
            InitializeComponent();
            this.Loaded += Gorusme_Loaded;
            client.TanimListeleCompleted += client_TanimListeleCompleted;
            client.GorusmelerEkleCompleted += client_GorusmelerEkleCompleted;
            client.HesapBilgileriCompleted += client_HesapBilgileriCompleted;
            client.AdresBilgileriCompleted += client_AdresBilgileriCompleted;
            cmbGorusmeTipi.SelectionChanged += cmbGorusmeTipi_SelectionChanged;

            txtHour1.MinValue = 1;
            txtHour1.MaxValue = 24;
            txtHour2.MinValue = 1;
            txtHour2.MaxValue = 24;

            txtMinute1.MinValue = 0;
            txtMinute1.MaxValue = 59;
            txtMinute2.MinValue = 0;
            txtMinute2.MaxValue = 59;
        }

        void cmbGorusmeTipi_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cmbGorusmeTipi.SelectedIndex > -1)
            {
                GenelTanim tnm = (GenelTanim)((ComboItem)cmbGorusmeTipi.SelectedItem).Tag;
                if (tnm != null)
                {
                    if (tnm.Deger == "0")
                    {
                        txtKonu.IsEnabled = false;
                        txtGorusmeYeri.IsEnabled = false;
                    }
                    else
                    {
                        txtKonu.IsEnabled = true;
                        txtGorusmeYeri.IsEnabled = true;
                    }
                }
            }
        }



        void client_AdresBilgileriCompleted(object sender, AdresBilgileriCompletedEventArgs e)
        {
            if (e.Error == null && e.Result != null)
            {
                txtAdres.Text = e.Result.Adresi;
                txtAdres.Tag = e.Result.No;
            }
        }

        void client_HesapBilgileriCompleted(object sender, HesapBilgileriCompletedEventArgs e)
        {
            if (e.Error == null && e.Result != null)
            {
                txtHesapAdi.Text = e.Result.Adi;
                txtHesapKodu.Text = e.Result.Kodu;
                txtHesapKodu.Tag = e.Result.ID;
            }
        }

        void client_GorusmelerEkleCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                MessageBox.Show("Kaydedildi");
                this.DialogResult = true;
            }
            else
            {
                MessageBox.Show("Hata oluştu ! \r\n" + e.Error.Message);
                this.DialogResult = false;
            }
        }

        void client_TanimListeleCompleted(object sender, CrmClient.TanimListeleCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                foreach (var item in e.Result)
                {
                    switch (item.Tip)
                    {
                        case 7:
                            cmbFirmaDurum.Items.Add(new ComboItem() { Tag = item, Text = item.Adi });
                            break;
                        case 8:
                            cmbFirmaTip.Items.Add(new ComboItem() { Tag = item, Text = item.Adi });
                            break;
                        case 16:
                        case 9:
                            cmbGorusmeTipi.Items.Add(new ComboItem() { Tag = item, Text = item.Adi });
                            break;
                        case 10:
                            cmbKapamaNedeni.Items.Add(new ComboItem() { Tag = item, Text = item.Adi });
                            break;
                    }
                }
            }

            if (cmbFirmaDurum.Items.Count > 0)
                cmbFirmaDurum.SelectedIndex = 0;

            if (cmbFirmaTip.Items.Count > 0)
                cmbFirmaTip.SelectedIndex = 0;

            if (cmbGorusmeTipi.Items.Count > 0)
                cmbGorusmeTipi.SelectedIndex = 0;

            if (cmbKapamaNedeni.Items.Count > 0)
                cmbKapamaNedeni.SelectedIndex = 0;

            if (cmbKatilimciTipi.Items.Count > 0)
                cmbKatilimciTipi.SelectedIndex = 0;

            if (!gorusme)
            {
                tbGorusme.Header = "Randevu Bilgileri";
                lblBaslangic.Text = "Randevu Başlangıcı";
                lblBitis.Text = "Randevu Bitiş";
                lblGorusmeTipi.Text = "Randevu Tipi";
                lblRandevuyeri.Text = "Randevu Yeri";
                if (eskiEvrak)
                {
                    this.Title = "Randevu Detayları";
                }
            }
            else
            {
                if (eskiEvrak)
                {
                    this.Title = "Görüşme Detayları";
                }
            }

            if (eskiEvrak && Hareket != null)
            {
                for (int i = 0; i < cmbFirmaDurum.Items.Count; i++)
                {
                    ComboItem item = (ComboItem)cmbFirmaDurum.Items[i];
                    if (((GenelTanim)item.Tag).ID == Hareket.FirmaDurumID)
                    {
                        cmbFirmaDurum.SelectedIndex = i;
                        break;
                    }
                }


                for (int i = 0; i < cmbFirmaTip.Items.Count; i++)
                {
                    ComboItem item = (ComboItem)cmbFirmaTip.Items[i];
                    if (((GenelTanim)item.Tag).ID == Hareket.FirmaTip)
                    {
                        cmbFirmaTip.SelectedIndex = i;
                        break;
                    }
                }


                for (int i = 0; i < cmbGorusmeTipi.Items.Count; i++)
                {
                    ComboItem item = (ComboItem)cmbGorusmeTipi.Items[i];
                    if (((GenelTanim)item.Tag).ID == Hareket.GorusmeTipID)
                    {
                        cmbGorusmeTipi.SelectedIndex = i;
                        break;
                    }
                }

                for (int i = 0; i < cmbKapamaNedeni.Items.Count; i++)
                {
                    ComboItem item = (ComboItem)cmbKapamaNedeni.Items[i];
                    if (((GenelTanim)item.Tag).ID == Hareket.KapamaNedeniID)
                    {
                        cmbKapamaNedeni.SelectedIndex = i;
                        break;
                    }
                }
            }

        }

        void Gorusme_Loaded(object sender, RoutedEventArgs e)
        {
            if (isDashboard)
            {
                dteBaslangic.IsEnabled = false;
                dteBitis.IsEnabled = false;
                txtHour1.IsEnabled = false;
                txtHour2.IsEnabled = false;
                txtMinute1.IsEnabled = false;
                txtMinute2.IsEnabled = false;
                txtHesapAdi.IsReadOnly = true;
                txtHesapKodu.IsReadOnly = true;
                btnHesapAdiAra.IsEnabled = false;
                btnHesapKoduAra.IsEnabled = false;
                cmbFirmaTip.IsEnabled = false;
            }

            client.TanimListeleAsync(7);
            client.TanimListeleAsync(8);
            if (!gorusme)
            {
                client.TanimListeleAsync(16);
            }
            else
            {
                client.TanimListeleAsync(9);
            }
            client.TanimListeleAsync(10);

            cmbKatilimciTipi.Items.Add("Personel");
            cmbKatilimciTipi.Items.Add("Müşteri");

            grdKatilimci.DataSource = katilimcilar;
            grdKatilimci.AddColumn("Adi");
            grdKatilimci.AddColumn("Soyadi");
            grdKatilimci.AddColumn("Telefon");
            grdKatilimci.AddColumn("Email");

            dteBaslangic.SelectedDate = DateTime.Now;
            dteBitis.SelectedDate = DateTime.Now;
            txtHour1.Text = DateTime.Now.Hour.ToString();
            txtHour2.Text = DateTime.Now.Hour.ToString();
            txtMinute1.Text = DateTime.Now.Minute.ToString();
            txtMinute2.Text = DateTime.Now.Minute.ToString();

            if (eskiEvrak)
            {
                txtAdres.Text = "";
                txtDetay.Text = Hareket.Detay;
                txtGorusmeYeri.Text = Hareket.Yer;
                txtHesapAdi.Text = Hareket.FirmaUnvani;
                txtHesapKodu.Text = Hareket.FirmaKodu;
                txtKonu.Text = Hareket.Konu;
                txtNotlar.Text = Hareket.Notlar;
                txtYetkili.Text = Hareket.Yetkili;
                dteBaslangic.SelectedDate = Hareket.BaslangicTarihi;
                dteBitis.SelectedDate = Hareket.BitisTarihi;

                txtHour1.Text = Hareket.BaslangicTarihi.Hour.ToString();
                txtHour2.Text = Hareket.BitisTarihi.Hour.ToString();
                txtMinute1.Text = Hareket.BaslangicTarihi.Minute.ToString();
                txtMinute2.Text = Hareket.BitisTarihi.Minute.ToString();

                client.HesapBilgileriAsync(Hareket.FirmaID, Hareket.FirmaTip);
                client.AdresBilgileriAsync(Hareket.AdresID);
                //client.YetkiliBilgileriAsync(Hareket.YetkiliID);



            }
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

        private void btnHesapKoduAra_Click(object sender, RoutedEventArgs e)
        {
            PopupList list = new PopupList();
            GenelTanim tnm = (GenelTanim)((ComboItem)cmbFirmaTip.SelectedItem).Tag;
            if (tnm != null)
            {
                switch (tnm.Deger)
                {
                    case "0":
                        list.ListeTipi = PopupListeTipleri.Cari;
                        break;
                    case "1":
                        list.ListeTipi = PopupListeTipleri.Aday;
                        break;
                }
            }
            list.KodunaGore = true;
            list.Filtre = txtHesapKodu.Text.Replace('*', '%');
            list.Closed += list_Closed;
            list.Show();
        }

        void list_Closed(object sender, EventArgs e)
        {
            PopupList ls = (PopupList)sender;
            if (ls.DialogResult == true)
            {
                if (ls.ListeTipi == PopupListeTipleri.Cari || ls.ListeTipi == PopupListeTipleri.Aday)
                {
                    txtHesapKodu.Text = ls.Result["Kodu"].ToString();
                    txtHesapAdi.Text = ls.Result["Adi"].ToString();
                    txtHesapKodu.Tag = ls.Result["ID"];
                }
                else if (ls.ListeTipi == PopupListeTipleri.Adres)
                {
                    txtAdres.Text = ls.Result["Adresi"].ToString();
                    txtAdres.Tag = ls.Result["ID"].ToString() + ";" + ls.Result["No"].ToString();
                }
                //else if (ls.ListeTipi == PopupListeTipleri.Yetkili)
                //{
                //    txtYetkili.Text = ls.Result["Adi"].ToString() + " " + ls.Result["Soyadi"].ToString();
                //    txtYetkili.Tag = ls.Result["ID"].ToString();
                //}
            }
        }

        private void btnHesapAdiAra_Click(object sender, RoutedEventArgs e)
        {
            PopupList list = new PopupList();
            GenelTanim tnm = (GenelTanim)((ComboItem)cmbFirmaTip.SelectedItem).Tag;
            if (tnm != null)
            {
                switch (tnm.Deger)
                {
                    case "0":
                        list.ListeTipi = PopupListeTipleri.Cari;
                        break;
                    case "1":
                        list.ListeTipi = PopupListeTipleri.Aday;
                        break;
                }
            }
            list.KodunaGore = false;
            list.Filtre = txtHesapAdi.Text.Replace('*', '%'); ;
            list.Closed += list_Closed;
            list.Show();
        }

        private void grdKatilimci_RowClick(object sender, DevExpress.AgDataGrid.RowClickEventArgs e)
        {
            katilimciTemizle();
            if (grdKatilimci.FocusedRowHandle > -1)
            {
                Katilimci kt = (Katilimci)grdKatilimci.GetDataRow(grdKatilimci.FocusedRowHandle);

                txtKatilimciAdi.Text = kt.Adi;
                txtKatilimciSoyadi.Text = kt.Soyadi;
                txtKatilimciTelefon.Text = kt.Telefon;
                txtKatilimciEmail.Text = kt.Email;
                cmbKatilimciTipi.SelectedIndex = kt.Tip;
            }
        }

        private void btnEkle_Click_1(object sender, RoutedEventArgs e)
        {
            katilimcilar.Add(new Katilimci()
            {
                Adi = txtKatilimciAdi.Text,
                Soyadi = txtKatilimciSoyadi.Text,
                Telefon = txtKatilimciTelefon.Text,
                Email = txtKatilimciEmail.Text,
                Tip = Convert.ToByte(cmbKatilimciTipi.SelectedIndex)
            });
            grdKatilimci.Refresh();
            katilimciTemizle();
        }

        private void katilimciTemizle()
        {
            txtKatilimciAdi.Text = "";
            txtKatilimciSoyadi.Text = "";
            txtKatilimciTelefon.Text = "";
            txtKatilimciEmail.Text = "";
            cmbKatilimciTipi.SelectedIndex = 0;
        }

        private void btnCikar_Click(object sender, RoutedEventArgs e)
        {
            if (grdKatilimci.FocusedRowHandle > -1)
            {
                katilimcilar.RemoveAt(grdKatilimci.FocusedRowHandle);
                grdKatilimci.Refresh();
            }
            katilimciTemizle();
        }

        private void btnKaydet_Click(object sender, RoutedEventArgs e)
        {
            if (tbctrl.SelectedIndex == 4)
            {
                Kaydet();
            }
            else if (tbctrl.SelectedIndex == 3)
            {
                btnKaydet.Content = "Kaydet";
                tbctrl.SelectedIndex += 1;
            }
            else
            {
                tbctrl.SelectedIndex += 1;
            }
        }

        private void Kaydet()
        {
            Kullanici usr = Session.Instance.GetValue<Kullanici>("user");
            Hareket hr = new Hareket();

            if (eskiEvrak)
            {
                hr.ID = Hareket.ID;
            }

            if (gorusme)
            {
                hr.HareketTip = 0;//görüşme
            }
            else
            {
                hr.HareketTip = 1;//randevu
            }

            if (txtAdres.Tag != null)
                hr.AdresID = Convert.ToInt32(txtAdres.Tag.ToString().Split(';')[0]);
            else
                hr.AdresID = 1;

            hr.Yetkili = txtYetkili.Text;
            hr.BaslangicTarihi = new DateTime(dteBaslangic.SelectedDate.Value.Year, dteBaslangic.SelectedDate.Value.Month, dteBaslangic.SelectedDate.Value.Day, Cevir.Parse<int>(txtHour1.Text), Cevir.Parse<int>(txtMinute1.Text), 0);
            hr.BitisTarihi = new DateTime(dteBitis.SelectedDate.Value.Year, dteBitis.SelectedDate.Value.Month, dteBitis.SelectedDate.Value.Day, Cevir.Parse<int>(txtHour2.Text), Cevir.Parse<int>(txtMinute2.Text), 0);

            hr.Detay = txtDetay.Text;
            hr.EkleyenKullanici = usr.ID;
            hr.FirmaUnvani = txtHesapAdi.Text;
            hr.FirmaKodu = txtHesapKodu.Text;

            if (cmbFirmaDurum.SelectedIndex > -1)
            {
                GenelTanim tnm = (GenelTanim)((ComboItem)cmbFirmaDurum.SelectedItem).Tag;
                hr.FirmaDurumID = tnm.ID;
            }
            hr.FirmaID = Convert.ToInt32(txtHesapKodu.Tag);

            if (cmbFirmaTip.SelectedIndex > -1)
            {
                GenelTanim tnm = (GenelTanim)((ComboItem)cmbFirmaTip.SelectedItem).Tag;
                hr.FirmaTip = tnm.ID;
            }
            hr.GuncellemeTarihi = DateTime.Now;
            hr.GuncelleyenKullanici = usr.ID;


            if (cmbKapamaNedeni.SelectedIndex > -1)
            {
                GenelTanim tnm = (GenelTanim)((ComboItem)cmbKapamaNedeni.SelectedItem).Tag;
                hr.KapamaNedeniID = tnm.ID;
            }

            if (cmbGorusmeTipi.SelectedIndex > -1)
            {
                GenelTanim tnm = (GenelTanim)((ComboItem)cmbGorusmeTipi.SelectedItem).Tag;
                hr.GorusmeTipID = tnm.ID;
            }

            hr.KayitTarihi = DateTime.Now;
            hr.Konu = txtKonu.Text;
            hr.Notlar = txtNotlar.Text;
            hr.Oncelik = 0;
            hr.Yer = txtGorusmeYeri.Text;

            client.GorusmelerEkleAsync(hr, katilimcilar);
        }

        private void btnAdresAra_Click(object sender, RoutedEventArgs e)
        {
            PopupList list = new PopupList();
            list.ListeTipi = PopupListeTipleri.Adres;
            list.KodunaGore = false;
            list.Filtre = txtHesapKodu.Text;
            list.Closed += list_Closed;
            list.Show();
        }

        private void btnYetkiliAra_Click(object sender, RoutedEventArgs e)
        {
            PopupList list = new PopupList();
            list.ListeTipi = PopupListeTipleri.Yetkili;
            list.KodunaGore = false;

            string adres = "1";
            if (!string.IsNullOrEmpty(txtAdres.Text))
                adres = txtAdres.Tag.ToString().Split(';')[1];

            list.Filtre = txtHesapKodu.Text + ";" + adres;
            list.Closed += list_Closed;
            list.Show();
        }
    }
}

